package org.layui.shop.controller;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.layui.shop.dao.ProductDao;
import org.layui.shop.dao.impl.ProductDaoImpl;
import org.layui.shop.entity.Product;

import java.io.IOException;
import java.util.List;

/**
 * 查询商品信息 - 支持分页和条件查询（商品名称、商品类型）
 * <p>
 * 测试 Serlvet API 的工具：Apifox、postman
 *
 * @author ZQX
 * @date 2024-12-03
 */
@WebServlet("/list_page_condition.do")
public class ListProductByPageAndConditionServlet extends BaseController {
    @Override
    public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");

        // 1.获取表单中输入的数据
        // 1.1）当前页
        String page = req.getParameter("page");
        // 1.2）每页记录数
        String limit = req.getParameter("limit");
        // 1.3）查询条件一：商品名称
        String productName = req.getParameter("productName");
        // 1.4）查询条件二：商品类型
        String productType = req.getParameter("productType");


        // 2.验证数据的合法性 - 正则表达式（略）
        int intPage = 1;
        if (page != null && page.matches("\\d{1,}")) {
            intPage = Integer.parseInt(page);
        }

        int intLimit = 5;
        if (limit != null && limit.matches("\\d{1,}")) {
            intLimit = Integer.parseInt(limit);
        }

        Product p = new Product();
        p.setProductName(productName);
        p.setProductType(productType);

        // 3.加工处理 - 业务实现
        // 3.1）实例化 DAO 对象
        ProductDao productDao = new ProductDaoImpl();

        // 3.2）调用 DAO 对象的方法，查询所有的商品信息 - 条件 + 分页
        // 3.2.1）查询当前的数据
        List<Product> list = productDao.selectByPage(p, intPage, intLimit);
        // 3.2.2）条件查询的总记录数
        Long count = productDao.selectByPageCount(p);

        // 4.响应结果 - 先数据封装到 ResponseData,然后序列为 JSON 字符串，最后响应数据
        print(res, success(list, count));
    }
}
